﻿using System;
using System.Collections.Generic;
using MaxStoreErp.Core.Exceptions;
using MaxStoreShop.Domain.Directories;
using MaxStoreShop.Logic.RepositoriesContracts.Directories;
using MaxStoreShop.Logic.ServicesContracts.Directories;
using Microsoft.Practices.Unity;

namespace MaxStoreShop.Logic.Services.Directories
{
    public class UserService : IUserService
    {
        [Dependency]
        public IUserRepository Repository { get; set; }

        public IEnumerable<StoreUser> GetUsers()
        {
            return Repository.GetUsers();
        }

        public void AuthorizeUser(StoreUser user, string password)
        {
            if (user == null)
                throw new ErpRuntimeException("Не указан экземпляр пользователя для авторизации!");

            if (string.Compare(user.SecretCode, password, StringComparison.Ordinal) != 0)
                throw new ErpRuntimeException("Указан неверный пароль!");
        }

        public void DeleteUser(StoreUser user)
        {
            if (user == null)
                throw new ErpRuntimeException("Не указан пользователь для удаления!");

            Repository.DeleteUser(user.Id);
        }

        public void SaveUser(StoreUser user)
        {
            if (user == null)
                throw new ErpRuntimeException("Не указан пользователь для сохранения!");

            if (string.IsNullOrWhiteSpace(user.FirstName))
                throw new ErpRuntimeException("Не указано имя пользователя при сохранении!");

            if (string.IsNullOrWhiteSpace(user.LastName))
                throw new ErpRuntimeException("Не указана фамилия пользователя при сохранении!");

            if (string.IsNullOrWhiteSpace(user.SecretCode))
                throw new ErpRuntimeException("Не указан секретный код пользователя при сохранении!");

            Repository.SaveUser(user);
        }
    }
}
